package exception;
/*
演示异常的抛出
throw关键字可以主动对外抛出一个异常
通常下列情况会主动抛出异常：
1.当程序出现了一个异常，但是该异常不应当有当前代码片段处理时可以将其抛出给上层调用者
2.程序可以运行，但是不满足业务场景（本案例就属于中这个情况）
 */
public class Person {
    private int age;
    public int getAge(){return age;}
    public void setAge(int age)throws IllegalAccessException{
        if(age<0||age>100){
            /*
            Exception下有两种分类：
            检查异常：当程序抛出此类异常，编译器会检查是否有异常处理机制处理该异常，没有则编译不通过
            非检查异常：当程序抛出此类异常时，编译器并不强制处理该异常。
                      不检查是否提供了异常处理机制
            RuntimeException---是非检查异常，剩下的全是检查异常
            其子类型异常也属于非检查异常
            NullPointerException---空指针异常
            ArryIndexOutOfBoundsException---数组下标越界异常
            NumberFormatException---数字格式异常
            ClassCastException---类造型异常
            RuntimeException异常定义的数据都属于BUG级别的问题，都是可以通过逻辑避免掉的异常

            throw new RuntimeException("年龄不合法“）；
            当前方法上使用throws声明该异常的抛出
             */
            throw  new IllegalAccessException("年龄不合法");
        }
        this.age=age;
    }
}
